home *** CD-ROM | disk | FTP | other *** search
/ Resource Library: Multimedia / Resource Library: Multimedia.iso / sgml / unix / sgmlc / arcpcbrf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-07-02  |  65.5 KB  |  1,271 lines

  1. /******************************************************************************/
  2. /* Added PCBEAL for LINK and data attribute specification list endings. */
  3. /* #UNDEFs were added to avoid LINT warnings.  External names were shortened */
  4. /* to 7 characters for IBMC.  In 3 group parses, REFC was treated like a */
  5. /* name character in some states, rather than as an invalid character. */
  6. /******************************************************************************/
  7. /* ARCPCBRF: Parse tables for reference concrete syntax.
  8. */
  9. #include "entity.h"           /* Templates for entity control blocks. */
  10. #include "action.h"           /* Action names for all parsing. */
  11. #include "synxtrn.h"          /* Declarations for concrete syntax constants. */
  12. #include "adl.h"              /* Definitions for attribute list processing. */
  13. /******************************************************************************/
  14. /* PCBCONM: State and action table for content parse of mixed content.
  15.             Initial state assumes a start-tag was just processed.
  16. */
  17. /* Symbols for state names (end with a number). */
  18. #define ET0     0   /* Markup found or buffer flushed; no data. */
  19. #define DA0     2   /* Data in buffer. */
  20. #define DA1     4   /* Data and space in buffer. */
  21. #define ER0     6   /* ERO found; start lookahead buffer. */
  22. #define CR0     8   /* CRO found (ERO, RNI). */
  23. #define RS0    10   /* RS found; possible SR 3-6. */
  24. #define ME0    12   /* MSC found. */
  25. #define ME1    14   /* MSC, MSC found. */
  26. #define ES0    16   /* TAGO found; start lookahead buffer. */
  27. #define EE0    18   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  28. #define NE0    20   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  29. #define MD0    22   /* MDO found (TAGO, MDO[2]). */
  30. #define MC0    24   /* MDO, COM found. */
  31. #define SC0    26   /* COM found; possible SR19-20. */
  32. #define SP0    28   /* Space found; data pending; possible SR7 or SR9. */
  33. #define SR0    30   /* SPCR found; possible SR7 or SR9. */
  34. #define TB0    32   /* TAB found; possible SR7 or SR9. */
  35.  
  36. int pcbcnet = ET0;            /* PCBCONM: markup found or data buffer flushed.*/
  37. int pcbcnda = DA0;            /* PCBCONM: data in buffer. */
  38.  
  39. static UNCH
  40. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  41.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  42. et0 []={DA0 ,DA0 ,DA0 ,DA0 ,SP0 ,ET0 ,ET0 ,ET0 ,RS0 ,ET0 ,TB0 ,DA0 ,DA0 ,ER0 ,
  43.         ET0 ,SC0 ,DA0 ,ET0 ,ET0 ,SR0 ,DA0 ,ME0 ,DA0 ,DA0 ,ET0 ,DA0 ,ES0 ,ET0 },/*et0*/
  44. et0a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,GET_,GET_,RSR_,SR2_,NOP_,DAS_,DAS_,LAS_,
  45.         REF_,NOP_,DAS_,NED_,SR10,NOP_,DAS_,LAS_,DAS_,DAS_,SR11,DAS_,LAS_,FCE_},
  46.  
  47. da0 []={DA0 ,DA0 ,DA0 ,DA0 ,DA1 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,ET0 ,
  48.         ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 },/*da0*/
  49. da0a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,DAF_,
  50.         DAF_,DAF_,NOP_,DAF_,DAF_,DAF_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_},
  51.  
  52. da1 []={DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,ET0 ,
  53.         ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 },/*da1*/
  54. da1a[]={NOP_,NOP_,NOP_,NOP_,DAR_,DAF_,DAF_,DAF_,DAF_,DAR_,DAR_,NOP_,NOP_,DAF_,
  55.         DAF_,DAF_,NOP_,DAF_,DAF_,DAR_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_},
  56.  
  57. er0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ER0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  58.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 },/*er0*/
  59. er0a[]={LAF_,LAF_,LAF_,ER_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  60.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_},
  61.  
  62. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  63.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  64. cr0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  65.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*cr0*/
  66. cr0a[]={NLF_,CRN_,NLF_,CRA_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  67.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  68.  
  69. rs0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,RS0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  70.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*rs0*/
  71. rs0a[]={SR3_,SR3_,SR3_,SR3_,SR4_,SR3_,SR3_,GET_,SR3_,SR5_,SR4_,SR3_,SR3_,SR3_,
  72.         SR3_,SR3_,SR3_,NED_,SR3_,SR4_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_},
  73.  
  74. me0 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME0, ET0 ,ET0 ,ET0 ,ET0, ET0, ET0,
  75.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ME1 ,ET0, ET0, ET0 ,ET0, ET0, ET0 },/*me0*/
  76. me0a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  77.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  78.  
  79. me1 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME1, ET0 ,ET0 ,ET0 ,ET0, ET0, ET0,
  80.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ET0 ,ET0, ET0, ET0 },/*me1*/
  81. me1a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  82.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  83.  
  84. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  85.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  86. es0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ES0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  87.         ET0 ,ET0 ,EE0 ,NE0 ,ET0 ,ET0 ,MD0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*es0*/
  88. es0a[]={LAF_,LAF_,LAF_,STG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  89.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAM_,LAF_,LAF_,PIS_,LAF_,NST_,LAF_,LAF_},
  90.  
  91. ee0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,EE0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  92.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*ee0*/
  93. ee0a[]={LAF_,LAF_,LAF_,ETG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  94.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_,LAF_},
  95.  
  96. ne0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,NE0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  97.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*ne0*/
  98. ne0a[]={NLF_,NLF_,NLF_,ETG_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  99.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NET_,NLF_,NLF_},
  100.  
  101. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  102.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  103. md0 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, MD0, ET0 ,ET0 ,ET0 ,ET0, ET0, ET0,
  104.         ET0 ,MC0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ET0 ,ET0, ET0, ET0 },/*md0*/
  105. md0a[]={LAF_,LAF_,LAF_,MD_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  106.         LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSS_,LAF_,LAF_,MDC_,LAF_,LAF_},
  107.  
  108. mc0 []={ET0, ET0, ET0, ET0, ET0, ET0 ,ET0, MC0, ET0 ,ET0, ET0 ,ET0, ET0, ET0,
  109.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0 ,ET0 ,ET0 ,ET0, ET0, ET0 },/*mc0*/
  110. mc0a[]={NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  111.         NLF_,MDC_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  112.  
  113. sc0 []={ET0, ET0, ET0, ET0, ET0, ET0 ,ET0, SC0, ET0 ,ET0, ET0 ,ET0, ET0, ET0,
  114.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0 ,ET0 ,ET0 ,ET0, ET0, ET0 },/*sc0*/
  115. sc0a[]={SR19,SR19,SR19,SR19,SR19,SR19,SR19,GET_,SR19,SR19,SR19,SR19,SR19,SR19,
  116.         SR19,SR20,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19},
  117.  
  118. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  119.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  120. sp0 []={DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,ET0 ,
  121.         ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 },/*sp0*/
  122. sp0a[]={NOP_,NOP_,NOP_,NOP_,SR9_,DAF_,DAF_,GTR_,DAF_,SR7_,SR9_,NOP_,NOP_,DAF_,
  123.         DAF_,DAF_,NOP_,DAF_,DAF_,SR9_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_},
  124.  
  125. sr0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,SR0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  126.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*sr0*/
  127. sr0a[]={SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,GET_,SR8_,SR7_,SR9_,SR8_,SR8_,SR8_,
  128.         SR8_,SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_},
  129.  
  130. tb0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,TB0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  131.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*tb0*/
  132. tb0a[]={SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,GET_,SR1_,SR7_,SR9_,SR1_,SR1_,SR1_,
  133.         SR1_,SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_},
  134.  
  135. *conmtab[] = {et0, et0a, da0, da0a, da1, da1a, er0, er0a, cr0, cr0a, rs0, rs0a,
  136.               me0, me0a, me1, me1a, es0, es0a, ee0, ee0a, ne0, ne0a, md0, md0a,
  137.               mc0, mc0a, sc0, sc0a, sp0, sp0a, sr0, sr0a, tb0, tb0a  };
  138. struct parse pcbconm = {"CONM", lexcnm, conmtab, 0, 0, 0, 0};
  139. #undef ET0
  140. #undef DA0
  141. #undef DA1
  142. #undef ER0
  143. #undef CR0
  144. #undef RS0
  145. #undef ME0
  146. #undef ME1
  147. #undef ES0
  148. #undef EE0
  149. #undef NE0
  150. #undef MD0
  151. #undef MC0
  152. #undef SC0
  153. #undef SP0
  154. #undef SR0
  155. #undef TB0
  156. /******************************************************************************/
  157. /* PCBCONE: State and action table for content parse of element content.
  158.             Initial state assumes a start-tag was just processed.
  159. */
  160. /* Symbols for state names (end with a number). */
  161. #define ET2     0   /* Markup found. */
  162. #define ER2     2   /* ERO found; start lookahead buffer. */
  163. #define CR2     4   /* CRO found (ERO, RNI). */
  164. #define RS2     6   /* RS found; possible SR 3-6 if they were declared. */
  165. #define ME2     8   /* MSC found. */
  166. #define ME3    10   /* MSC, MSC found. */
  167. #define ES2    12   /* TAGO found; start lookahead buffer. */
  168. #define EE2    14   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  169. #define NE2    16   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  170. #define MD2    18   /* MDO found (TAGO, MDO[2]). */
  171. #define MC2    20   /* MDO, COM found. */
  172. #define SC2    22   /* COM found; possible SR19-20 if they were mapped. */
  173. #define SP2    24   /* Space found; possible SR7 or SR9. */
  174. #define SR2    26   /* SPCR found; possible SR7 or SR9. */
  175. #define TB2    28   /* TAB found; possible SR7 or SR9. */
  176.  
  177. static UNCH
  178. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  179.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  180. et2 []={ET2 ,ET2 ,ET2 ,ET2 ,SP2 ,ET2 ,ET2 ,ET2 ,RS2 ,ET2 ,TB2 ,ET2 ,ET2 ,ER2 ,
  181.         ET2 ,SC2 ,ET2 ,ET2 ,ET2 ,SR2 ,ET2 ,ME2 ,ET2 ,ET2 ,ET2 ,ET2 ,ES2 ,ET2 },/*et2*/
  182. et2a[]={DCE_,DCE_,DCE_,DCE_,NOP_,DCE_,GET_,GET_,RS_ ,SR2_,NOP_,DCE_,DCE_,LAS_,
  183.         NOP_,NOP_,DCE_,NED_,SR10,NOP_,DCE_,LAS_,DCE_,DCE_,SR11,DCE_,LAS_,DCE_},
  184.  
  185. er2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ER2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  186.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,CR2 ,ET2 ,ET2 ,ET2 },/*er2*/
  187. er2a[]={LAF_,LAF_,LAF_,ER_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  188.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_},
  189.  
  190. cr2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,CR2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  191.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*cr2*/
  192. cr2a[]={NLF_,CRN_,NLF_,CRA_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  193.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  194.  
  195. rs2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,RS2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  196.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*rs2*/
  197. rs2a[]={SR3_,SR3_,SR3_,SR3_,SR4_,SR3_,SR3_,GET_,SR3_,SR5_,SR4_,SR3_,SR3_,SR3_,
  198.         SR3_,SR3_,SR3_,NED_,SR3_,SR4_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_},
  199.  
  200. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  201.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  202. me2 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME2, ET2 ,ET2 ,ET2 ,ET2, ET2, ET2,
  203.         ET2 ,ET2, ET2 ,ET2, ET2, ET2, ET2, ME3 ,ET2, ET2, ET2 ,ET2, ET2, ET2 },/*me2*/
  204. me2a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  205.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  206.  
  207. me3 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME3, ET2 ,ET2 ,ET2 ,ET2, ET2, ET2,
  208.         ET2 ,ET2, ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ET2 ,ET2, ET2, ET2 },/*me3*/
  209. me3a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  210.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  211.  
  212. es2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ES2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  213.         ET2 ,ET2 ,EE2 ,NE2 ,ET2 ,ET2 ,MD2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*es2*/
  214. es2a[]={LAF_,LAF_,LAF_,STG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  215.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAM_,LAF_,LAF_,PIS_,LAF_,NST_,LAF_,LAF_},
  216.  
  217. ee2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,EE2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  218.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*ee2*/
  219. ee2a[]={LAF_,LAF_,LAF_,ETG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  220.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_,LAF_},
  221.  
  222. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  223.         nmre com  eti  net  lit  spc  mdo  msc  mso  pio  rni  tagc tago fce   */
  224. ne2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,NE2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  225.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*ne2*/
  226. ne2a[]={NLF_,NLF_,NLF_,ETG_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  227.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NET_,NLF_,NLF_},
  228.  
  229. md2 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, MD2, ET2 ,ET2 ,ET2 ,ET2, ET2, ET2,
  230.         ET2 ,MC2, ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ET2 ,ET2, ET2, ET2 },/*md2*/
  231. md2a[]={LAF_,LAF_,LAF_,MD_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  232.         LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSS_,LAF_,LAF_,MDC_,LAF_,LAF_},
  233.  
  234. mc2 []={ET2, ET2, ET2, ET2, ET2, ET2 ,ET2, MC2, ET2 ,ET2, ET2 ,ET2, ET2, ET2,
  235.         ET2 ,ET2, ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2 ,ET2 ,ET2 ,ET2, ET2, ET2 },/*mc2*/
  236. mc2a[]={NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  237.         NLF_,MDC_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  238.  
  239. sc2 []={ET2, ET2, ET2, ET2, ET2, ET2 ,ET2, SC2, ET2 ,ET2, ET2 ,ET2, ET2, ET2,
  240.         ET2 ,ET2 ,ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2 ,ET2 ,ET2 ,ET2, ET2, ET2 },/*sc2*/
  241. sc2a[]={SR19,SR19,SR19,SR19,SR19,SR19,SR19,GET_,SR19,SR19,SR19,SR19,SR19,SR19,
  242.         SR19,SR20,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19},
  243.  
  244. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  245.         nmre com  eti  net  lit  spc  mdo  msc  mso  pio  rni  tagc tago fce   */
  246. sp2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,SP2 ,RS2 ,ET2 ,ET2 ,ET2 ,ET2 ,ER2 ,
  247.         ET2 ,SC2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ME2 ,ET2 ,ET2 ,ET2 ,ET2 ,ES2 ,ET2 },/*sp2*/
  248. sp2a[]={DCE_,DCE_,DCE_,DCE_,SR9_,DCE_,GET_,GET_,RS_ ,SR7_,SR9_,DCE_,DCE_,LAS_,
  249.         NOP_,NOP_,DCE_,NED_,SR10,SR9_,DCE_,LAS_,DCE_,DCE_,SR11,DCE_,LAS_,DCE_},
  250.  
  251. sr2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,SR2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  252.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*sr2*/
  253. sr2a[]={SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,GET_,SR8_,SR7_,SR9_,SR8_,SR8_,SR8_,
  254.         SR8_,SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_},
  255.  
  256. tb2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,TB2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  257.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*tb2*/
  258. tb2a[]={SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,GET_,SR1_,SR7_,SR9_,SR1_,SR1_,SR1_,
  259.         SR1_,SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_},
  260.  
  261. *conetab[] = {et2, et2a, er2, er2a, cr2, cr2a, rs2, rs2a, me2, me2a, me3, me3a,
  262.               es2, es2a, ee2, ee2a, ne2, ne2a, md2, md2a, mc2, mc2a, sc2, sc2a,
  263.               sp2, sp2a, sr2, sr2a, tb2, tb2a  };
  264. struct parse pcbcone = {"CONE", lexcnm, conetab, 0, 0, 0, 0};
  265. #undef ET2
  266. #undef ER2
  267. #undef CR2
  268. #undef RS2
  269. #undef ME2
  270. #undef ME3
  271. #undef ES2
  272. #undef EE2
  273. #undef NE2
  274. #undef MD2
  275. #undef MC2
  276. #undef SC2
  277. #undef SP2
  278. #undef SR2
  279. #undef TB2
  280. /******************************************************************************/
  281. /* PCBCONR: State and action table for content parse of replaceable character
  282.             data.  Initial state assumes a start-tag was just processed.
  283.             Only entity references and character references are recognized.
  284. */
  285. /* Symbols for state names (end with a number). */
  286. #define ET4     0   /* Markup found or buffer flushed; no data. */
  287. #define DA4     2   /* Data in buffer. */
  288. #define ER4     4   /* ERO found; start lookahead buffer. */
  289. #define CR4     6   /* CRO found (ER2, RNI). */
  290. #define ES4     8   /* TAGO found; start lookahead buffer. */
  291. #define EE4    10   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  292. #define NE4    12   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  293.  
  294. static UNCH
  295. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  296.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  297. et4 []={DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,DA4 ,DA4 ,DA4 ,ER4 ,
  298.         ET4 ,DA4 ,DA4 ,ET4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ES4 },/*et4*/
  299. et4a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EE_ ,GET_,RS_ ,REF_,DAS_,DAS_,DAS_,LAS_,
  300.         REF_,DAS_,DAS_,NED_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,LAS_},
  301.  
  302. da4 []={DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,DA4 ,DA4 ,DA4 ,ET4 ,
  303.         ET4 ,DA4 ,DA4 ,ET4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ET4 },/*da4*/
  304. da4a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,NOP_,DAF_,
  305.         DAF_,NOP_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,DAF_},
  306.  
  307. er4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ER4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  308.         ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,CR4 ,ET4 ,ET4 },/*er4*/
  309. er4a[]={LAF_,LAF_,LAF_,ERX_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  310.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_},
  311.  
  312. cr4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,CR4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  313.         ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*cr4*/
  314. cr4a[]={LAF_,CRN_,LAF_,CRA_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  315.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  316.  
  317. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  318.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  319. es4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  320.         ET4 ,ET4 ,EE4 ,NE4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*es4*/
  321. es4a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  322.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  323.  
  324. ee4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,EE4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  325.         ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*ee4*/
  326. ee4a[]={LAF_,LAF_,LAF_,ETC_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  327.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_},
  328.  
  329. ne4 []={EE4 ,EE4 ,EE4 ,ET4 ,EE4 ,EE4 ,EE4 ,NE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,
  330.         EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,ET4 ,EE4 },/*ne4*/
  331. ne4a[]={RC2_,RC2_,RC2_,ETC_,RC2_,RC2_,RC2_,GET_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,
  332.         RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,NET_,RC2_},
  333.  
  334. *conrtab[] = {et4, et4a, da4, da4a, er4, er4a, cr4, cr4a,
  335.               es4, es4a, ee4, ee4a, ne4, ne4a};
  336. struct parse pcbconr = {"CONR", lexcon, conrtab, 0, 0, 0, 0};
  337. #undef ET4
  338. #undef DA4
  339. #undef ER4
  340. #undef CR4
  341. #undef ES4
  342. #undef EE4
  343. #undef NE4
  344. /******************************************************************************/
  345. /* PCBCONC: State and action table for content parse of character data.
  346.             Initial state assumes a start-tag was just processed.
  347. */
  348. /* Symbols for state names (end with a number). */
  349. #define ET6     0   /* Markup found or buffer flushed; no data. */
  350. #define DA6     2   /* Data in buffer. */
  351. #define ES6     4   /* TAGO found; start lookahead buffer. */
  352. #define EE6     6   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  353. #define NE6     8   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  354.  
  355. static UNCH
  356. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  357.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  358. et6 []={DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,DA6 ,DA6 ,DA6 ,DA6 ,
  359.         ET6 ,DA6 ,DA6 ,ET6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ES6 },/*et6*/
  360. et6a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EOF_,GET_,RS_ ,REF_,DAS_,DAS_,DAS_,DAS_,
  361.         REF_,DAS_,DAS_,NED_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,LAS_},
  362.  
  363. da6 []={DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,DA6 ,DA6 ,DA6 ,ET6 ,
  364.         ET6 ,DA6 ,DA6 ,ET6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ET6 },/*da6*/
  365. da6a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,NOP_,DAF_,
  366.         DAF_,NOP_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,DAF_},
  367.  
  368. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  369.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  370. es6 []={ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ES6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,
  371.         ET6 ,ET6 ,EE6 ,NE6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 },/*es6*/
  372. es6a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  373.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  374.  
  375. ee6 []={ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,EE6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,
  376.         ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 },/*ee6*/
  377. ee6a[]={LAF_,LAF_,LAF_,ETC_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  378.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_},
  379.  
  380. ne6 []={EE6 ,EE6 ,EE6 ,ET6 ,EE6 ,EE6 ,EE6 ,NE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,
  381.         EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,ET6 ,EE6 },/*ne6*/
  382. ne6a[]={RC2_,RC2_,RC2_,ETC_,RC2_,RC2_,RC2_,GET_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,
  383.         RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,NET_,RC2_},
  384.  
  385. *conctab[] = {et6, et6a, da6, da6a, es6, es6a, ee6, ee6a, ne6, ne6a};
  386. struct parse pcbconc = {"CONC", lexcon, conctab, 0, 0, 0, 0};
  387. #undef ET6
  388. #undef DA6
  389. #undef ES6
  390. #undef EE6
  391. #undef NE6
  392. /******************************************************************************/
  393. /* PCBPRO: State and action table for prolog parse.
  394.            Initial state assumes document just began.
  395. */
  396. /* Symbols for state names (end with a number). */
  397. #define ET7     0   /* Markup found. */
  398. #define ES7     2   /* TAGO found; start lookahead buffer. */
  399. #define MD7     4   /* MDO found (TAGO, MDO[2]). */
  400. #define MC7     6   /* MDO, COM found. */
  401.  
  402. static UNCH
  403. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  404.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago */
  405. et7 []={ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,
  406.         ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ES7 },/*et7*/
  407. et7a[]={DCE_,DCE_,DCE_,DCE_,NOP_,DCE_,EOF_,GET_,RS_ ,NOP_,NOP_,DCE_,DCE_,DCE_,
  408.         DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,LAS_},
  409.  
  410. es7 []={ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ES7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,
  411.         ET7 ,ET7 ,ET7 ,ET7 ,MD7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 },/*es7*/
  412. es7a[]={PEP_,PEP_,PEP_,PEP_,PEP_,PEP_,PEP_,GET_,PEP_,PEP_,PEP_,PEP_,PEP_,PEP_,
  413.         PEP_,PEP_,PEP_,PEP_,LAM_,PEP_,PEP_,PEP_,PIS_,PEP_,PEP_,PEP_},
  414.  
  415. md7 []={ET7, ET7, ET7, ET7, ET7 ,ET7, ET7, MD7, ET7 ,ET7 ,ET7 ,ET7, ET7, ET7,
  416.         ET7, MC7, ET7, ET7, ET7, ET7 ,ET7, ET7, ET7, ET7 ,ET7, ET7 },/*md7*/
  417. md7a[]={LAF_,LAF_,LAF_,DTD_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  418.         LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NOP_,LAF_},
  419.  
  420. mc7 []={ET7, ET7, ET7, ET7, ET7, ET7 ,ET7, MC7, ET7 ,ET7, ET7 ,ET7, ET7, ET7,
  421.         ET7, ET7, ET7, ET7, ET7, ET7 ,ET7 ,ET7, ET7 ,ET7 ,ET7, ET7 },/*mc7*/
  422. mc7a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  423.         LAF_,MDC_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  424.  
  425. *protab[] = {et7, et7a, es7, es7a, md7, md7a, mc7, mc7a};
  426. struct parse pcbpro = {"PRO", lexcon, protab, 0, 0, 0, 0};
  427. #undef ET7
  428. #undef ES7
  429. #undef MD7
  430. #undef MC7
  431. /******************************************************************************/
  432. /* PCBMDS: State and action table for parse of markup declaration subset.
  433.            Initial state assumes subset just began (MSO found).
  434. */
  435. /* Symbols for state names (end with a number). */
  436. #define ET8     0   /* Markup found. */
  437. #define ER8     2   /* PERO found; start lookahead buffer. */
  438. #define ME8     4   /* MSC found. */
  439. #define ME9     6   /* MSC, MSC found. */
  440. #define ES8     8   /* TAGO found; start lookahead buffer. */
  441. #define MD8    10   /* MDO found (TAGO, MDO[2]). */
  442. #define MC8    12   /* MDO, CD found. */
  443. #define DC8    14   /* Data characters found (erroneously). */
  444.  
  445. static UNCH
  446. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  447.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago */
  448. et8 []={DC8 ,DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,ET8 ,ET8 ,ET8 ,ET8 ,ET8 ,DC8 ,DC8 ,DC8 ,
  449.         DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,ME8 ,DC8 ,ER8 ,DC8 ,DC8 ,DC8 ,ES8 },/*et8*/
  450. et8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,GET_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  451.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  452.  
  453. er8 []={DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,DC8 ,DC8 ,ER8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,
  454.         DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 },/*er8*/
  455. er8a[]={NOP_,NOP_,NOP_,PER_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  456.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  457.  
  458. me8 []={ET8, ET8, ET8, ET8, ET8 ,ET8, ET8, ME8, ET8 ,ET8 ,ET8 ,ET8, ET8, ET8,
  459.         ET8 ,ET8, ET8 ,ET8, ET8, ME9 ,ET8, ET8, ET8, ET8 ,ET8, ET8 },/*me8*/
  460. me8a[]={DTE_,DTE_,DTE_,DTE_,DTE_,DTE_,DTE_,GET_,DTE_,DTE_,DTE_,DTE_,DTE_,DTE_,
  461.         DTE_,DTE_,DTE_,DTE_,DTE_,NOP_,DTE_,DTE_,DTE_,DTE_,DTE_,DTE_},
  462.  
  463. me9 []={DC8, DC8, DC8, DC8, DC8 ,DC8, DC8, ME9, DC8 ,DC8 ,DC8 ,DC8, DC8, DC8,
  464.         DC8 ,DC8, DC8 ,DC8, DC8, DC8 ,DC8, DC8, DC8, DC8 ,ET8, DC8 },/*me9*/
  465. me9a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  466.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,MSE_,NOP_},
  467.  
  468. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  469.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago */
  470. es8 []={DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,ES8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,
  471.         DC8 ,DC8 ,DC8 ,DC8 ,MD8 ,DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,DC8 ,DC8 },/*es8*/
  472. es8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  473.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,PIS_,NOP_,NOP_,NOP_},
  474.  
  475. md8 []={DC8, DC8, DC8, ET8, DC8 ,DC8, DC8, MD8, DC8 ,DC8 ,DC8 ,DC8, DC8, DC8,
  476.         DC8 ,MC8, DC8 ,DC8, DC8, DC8 ,ET8, DC8, DC8, DC8 ,ET8, DC8 },/*md8*/
  477. md8a[]={NOP_,NOP_,NOP_,MD_ ,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  478.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,MSS_,NOP_,NOP_,NOP_,NOP_,NOP_},
  479.  
  480. mc8 []={DC8, DC8, DC8, DC8, DC8, DC8 ,DC8, MC8, DC8 ,DC8, DC8 ,DC8, DC8, DC8,
  481.         DC8 ,ET8, DC8 ,DC8, DC8, DC8 ,DC8 ,DC8, DC8 ,DC8 ,DC8, DC8 },/*mc8*/
  482. mc8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  483.         NOP_,MDC_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  484.  
  485. dc8 []={DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,
  486.         DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,ET8 ,DC8 ,DC8 ,DC8 ,ET8 },/*dc8*/
  487. dc8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,GET_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  488.         NOP_,NOP_,NOP_,NOP_,NOP_,CIR_,NOP_,CIR_,NOP_,NOP_,NOP_,CIR_},
  489.  
  490. *mdstab[] = {et8, et8a, er8, er8a, me8, me8a, me9, me9a,
  491.              es8, es8a, md8, md8a, mc8, mc8a, dc8, dc8a};
  492. struct parse pcbmds = {"MDS", lexcon, mdstab, 0, 0, 0, 0};
  493. #undef ET8
  494. #undef ER8
  495. #undef ME8
  496. #undef ME9
  497. #undef ES8
  498. #undef MD8
  499. #undef MC8
  500. #undef DC8
  501. /******************************************************************************/
  502. /* PCBGRCM: State and action table for content model group.
  503.             Groups can nest.  Reserved names are allowed.
  504.             Data tag token groups are allowed.
  505.             A non-reserved name or model group can have a suffix.
  506.             Columns are based on LEXGRP.C.
  507. */
  508. /* Symbols for state names (end with a number). */
  509. #define TK1     0   /* Token expected: name, #CHARS, data tag grp, model. */
  510. #define CO1     2   /* Connector between tokens expected. */
  511. #define ER1     4   /* PERO found when token was expected. */
  512. #define SP1     6   /* Name or model: suffix or connector expected. */
  513. #define RN1     8   /* RNI found; possible #PCDATA. */
  514. #define DG1    10   /* Data tag: group begun; name expected. */
  515. #define DN1    12   /* Data tag: name found; SEQ connector expected. */
  516. #define DT1    14   /* Data tag: ignore template and pattern; MSC expected. */
  517. #define DR1    16   /* PERO found when data tag name was expected. */
  518. #define LI1    18   /* Literal in data tag group; search for LIT. */
  519. #define LA1    20   /* Literal in data tag group; search for LITA. */
  520.  
  521. static UNCH
  522. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  523.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  524. tk01 []={TK1 ,TK1 ,SP1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  525.          TK1 ,DG1 ,TK1 ,TK1 ,ER1 ,TK1 ,TK1 ,RN1 ,TK1 ,TK1 },/*tk1*/
  526. tk01a[]={INV_,INV_,NAS_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,GRP_,INV_,INV_,
  527.          INV_,GRP_,INV_,INV_,NOP_,INV_,INV_,NOP_,INV_,INV_},
  528.  
  529. co01 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,TK1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  530.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*co1*/
  531. co01a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,AND ,GRPE,INV_,INV_,INV_,
  532.          INV_,INV_,INV_,OR  ,INV_,INV_,INV_,INV_,SEQ ,INV_},
  533.  
  534. er01 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  535.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*er1*/
  536. er01a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  537.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  538.  
  539. sp01 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,SP1 ,CO1 ,SP1 ,CO1 ,TK1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  540.          TK1 ,TK1 ,CO1 ,TK1 ,TK1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 },/*sp1*/
  541. sp01a[]={INV_,LEN_,LEN_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,AND ,GRPE,INV_,INV_,INV_,
  542.          INV_,INV_,OPT ,OR  ,INV_,REP ,OREP,INV_,SEQ ,LEN_},
  543.  
  544. /*       bit  nmc  nms  spc  spc  non  ee   eob  rs   and  grpc grpo lit  lita
  545.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  546. rn01 []={TK1 ,TK1 ,CO1 ,TK1 ,TK1 ,RN1 ,TK1 ,RN1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  547.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*rn1*/
  548. rn01a[]={PCI_,PCI_,RNS_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  549.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  550.  
  551. dg01 []={TK1 ,TK1 ,DN1 ,DG1 ,DG1 ,DG1 ,DG1 ,DG1 ,DG1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  552.          TK1 ,TK1 ,TK1 ,TK1 ,DR1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*dg1*/
  553. dg01a[]={INV_,INV_,NAS_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  554.          INV_,INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,INV_},
  555.  
  556. dn01 []={TK1 ,TK1 ,TK1 ,DN1 ,DN1 ,DN1 ,DN1 ,DN1 ,DN1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  557.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,DT1 ,TK1 },/*dn1*/
  558. dn01a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  559.          INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_,DTAG,INV_},
  560.  
  561. dt01 []={TK1 ,TK1 ,TK1 ,DT1 ,DT1 ,DT1 ,DT1 ,DT1 ,DT1 ,TK1 ,DT1 ,DT1 ,LI1 ,LA1 ,
  562.          CO1 ,TK1 ,TK1 ,DT1 ,DT1 ,TK1 ,TK1 ,TK1 ,DT1 ,TK1 },/*dt1*/
  563. dt01a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,INV_,NOP_,NOP_,NOP_,NOP_,
  564.          GRPE,INV_,INV_,NOP_,NOP_,INV_,INV_,INV_,NOP_,INV_},
  565.  
  566. /*       bit  nmc  nms  spc  spc  non  ee   eob  rs   and  grpc grpo lit  lita
  567.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  568. dr01 []={TK1 ,TK1 ,DG1 ,TK1 ,TK1 ,DR1 ,TK1 ,DR1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  569.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*dr1*/
  570. dr01a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  571.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  572.  
  573. li01 []={LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,DT1 ,LI1 ,
  574.          LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 },/*li1*/
  575. li01a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  576.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  577.  
  578. la01 []={LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,DT1 ,
  579.          LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 },/*la1*/
  580. la01a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  581.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  582.  
  583. *grcmtab[] = {tk01, tk01a, co01, co01a, er01, er01a, sp01, sp01a,
  584.               rn01, rn01a, dg01, dg01a, dn01, dn01a, dt01, dt01a,
  585.               dr01, dr01a, li01, li01a, la01, la01a};
  586. struct parse pcbgrcm = {"GRCM", lexgrp, grcmtab, 0, 0, 0, 0};
  587. #undef TK1
  588. #undef CO1
  589. #undef ER1
  590. #undef SP1
  591. #undef RN1
  592. #undef DG1
  593. #undef DN1
  594. #undef DT1
  595. #undef DR1
  596. #undef LI1
  597. #undef LA1
  598. /******************************************************************************/
  599. /* PCBGRCS: State and action table for content model suffix.
  600.             If suffix occurs, process it.  Otherwise, put character
  601.             back for the next parse.
  602. */
  603. /* Symbols for state names (end with a number). */
  604. #define SP4     0   /* Suffix expected. */
  605.  
  606. static UNCH
  607. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  608.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  609. sp04 []={SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,
  610.          SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 },/*sp4*/
  611. sp04a[]={RCR_,RCR_,RCR_,RCR_,RCR_,SYS_,EE_ ,GET_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,
  612.          RCR_,RCR_,OPT ,RCR_,RCR_,REP ,OREP,RCR_,RCR_,RCR_},
  613.  
  614. *grcstab[] = {sp04, sp04a};
  615. struct parse pcbgrcs = {"GRCS", lexgrp, grcstab, 0, 0, 0, 0};
  616. #undef SP4
  617. /******************************************************************************/
  618. /* PCBGRNT: State and action table for name token group parse.
  619.             Groups cannot nest.  Reserved names are not allowed.
  620.             No suffixes or data tag pattern groups.
  621. */
  622. /* Symbols for state names (end with a number). */
  623. #define TK1     0   /* Token expected: name, #CHARS, data tag grp, model. */
  624. #define CO1     2   /* Connector between tokens expected. */
  625. #define ER1     4   /* PERO found when token was expected. */
  626.  
  627. static UNCH
  628. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  629.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  630. tk02 []={TK1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  631.          TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,CO1 },/*tk1*/
  632. tk02a[]={INV_,NMT_,NMT_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  633.          INV_,INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,NMT_},
  634.  
  635. co02 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  636.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*co1*/
  637. co02a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,GRPE,INV_,INV_,INV_,
  638.          INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,NOP_,INV_},
  639.  
  640. er02 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  641.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*er1*/
  642. er02a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  643.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  644.  
  645. *grnttab[] = {tk02, tk02a, co02, co02a, er02, er02a};
  646. struct parse pcbgrnt = {"GRNT", lexgrp, grnttab, 0, 0, 0, 0};
  647. #undef TK1
  648. #undef CO1
  649. #undef ER1
  650. /******************************************************************************/
  651. /* PCBGRNM: State and action table for name group parse.
  652.             Groups cannot nest.  Reserved names are not allowed.
  653.             No suffixes or data tag pattern groups.
  654. */
  655. /* Symbols for state names (end with a number). */
  656. #define TK1     0   /* Token expected: name, #CHARS, data tag grp, model. */
  657. #define CO1     2   /* Connector between tokens expected. */
  658. #define ER1     4   /* PERO found when token was expected. */
  659.  
  660. static UNCH
  661. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  662.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  663. tk03 []={TK1 ,TK1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  664.          TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*tk1*/
  665. tk03a[]={INV_,INV_,NAS_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  666.          INV_,INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,INV_},
  667.  
  668. co03 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  669.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*co1*/
  670. co03a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,GRPE,INV_,INV_,INV_,
  671.          INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,NOP_,INV_},
  672.  
  673. er03 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  674.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*er1*/
  675. er03a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  676.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  677.  
  678. *grnmtab[] = {tk03, tk03a, co03, co03a, er03, er03a};
  679. struct parse pcbgrnm = {"GRNM", lexgrp, grnmtab, 0, 0, 0, 0};
  680. #undef TK1
  681. #undef CO1
  682. #undef ER1
  683. /******************************************************************************/
  684. /* PCBREF: State and action table to find the end of entity, parameter entity,
  685.            and character references.  The opening delimiter and name
  686.            have already been found; the parse determines whether the
  687.            tokenization of the name ended normally and processes the REFC.
  688. */
  689. /* Symbols for state names (end with a number). */
  690. #define ER5     0   /* Handle REFC or other entity reference termination. */
  691. #define ER6     2   /* Return to caller and reset state for next call. */
  692.  
  693. static UNCH
  694. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  695.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  696. er05 []={ER5 ,ER6 ,ER6 ,ER6 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,
  697.          ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER6 },/*er5*/
  698. er05a[]={RCR_,LEN_,LEN_,NOP_,RCR_,SYS_,RCR_,GET_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,
  699.          RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,NOP_},
  700.  
  701. er06 []={ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,
  702.          ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 },/*er6*/
  703. er06a[]={RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,
  704.          RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_},
  705.  
  706. *reftab[]={er05, er05a, er06, er06a};
  707. struct parse pcbref = {"ENTREF", lexgrp, reftab, 0, 0, 0, 0};
  708. #undef ER5
  709. #undef ER6
  710. /******************************************************************************/
  711. /******************************************************************************/
  712. /*
  713. Use (typical)           Name   Ending  Chsw References RS   RE   SEP
  714. Parameter literal       LITPC  LIT/A   OK   Parm,Char  RSM_ LAM_ LAM_
  715.      Data tag template                 NO
  716. System ID               LITC   LIT/A   n/a  none       RSM_ LAM_ LAM_
  717.      Processing instruction    PIC
  718. Attribute value         LITRV  LIT/A   NO   Gen,Char   RS_  FUN_ FUN_
  719. Minimum literal         LITV   LIT/A   n/a  none       RS_  FUN_ MLE_
  720. */
  721. /******************************************************************************/
  722. /* PCBLITP: Literal parse with parameter and character references;
  723.             no function character translation.
  724. */
  725. /* Symbols for state names (end with a number). */
  726. #define DA0     0   /* Data in buffer. */
  727. #define ER0     2   /* ERO found. */
  728. #define CR0     4   /* CRO found (ER0, RNI). */
  729. #define PR0     6   /* PRO found (for PCBLITP). */
  730.  
  731. static UNCH
  732. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  733.          mdo  msc  mso  pero rni  tagc tago litc */
  734. da13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,
  735.          DA0 ,DA0 ,DA0 ,PR0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da3*/
  736. da13a[]={MLA_,MLA_,MLA_,MLA_,MLA_,NON_,EE_ ,GET_,RSM_,MLA_,MLA_,MLA_,MLA_,NOP_,
  737.          MLA_,MLA_,MLA_,NOP_,MLA_,MLA_,MLA_,TER_},
  738.  
  739. er13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  740.          DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 },/*er3*/
  741. er13a[]={LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  742.          LPR_,LPR_,LPR_,LPR_,NOP_,LPR_,LPR_,LPR_},
  743.  
  744. cr13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  745.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*cr3*/
  746. cr13a[]={LP2_,CRN_,LP2_,CRA_,LP2_,LP2_,LP2_,GET_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,
  747.          LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_},
  748.  
  749. pr13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,PR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  750.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*pr3*/
  751. pr13a[]={LPR_,LPR_,LPR_,PEX_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  752.          LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_},
  753.  
  754. *litptab[] = {da13, da13a, er13, er13a, cr13, cr13a, pr13, pr13a};
  755. struct parse pcblitp = {"LITP", lexlms, litptab, 0, 0, 0, 0};
  756. #undef DA0
  757. #undef ER0
  758. #undef CR0
  759. #undef PR0
  760. /******************************************************************************/
  761. /* PCBLITC: Literal parse; no references; no function char translation.
  762.             Used for character data (system data).
  763. */
  764. /* Symbols for state names (end with a number). */
  765. #define DA0     0   /* Data in buffer. */
  766.  
  767. static UNCH
  768. /*      free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  769.         mdo  msc  mso  pero rni  tagc tago litc */
  770. da2 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  771.         DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da2*/
  772. da2a[]={MLA_,MLA_,MLA_,MLA_,MLA_,SYS_,EOF_,GET_,RSM_,MLA_,MLA_,MLA_,MLA_,MLA_,
  773.         MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,TER_},
  774.  
  775. *litctab[] = {da2, da2a};
  776. struct parse pcblitc = {"LITC", lexlms, litctab, 0, 0, 0, 0};
  777. #undef DA0
  778. /******************************************************************************/
  779. /* PCBLITR: Attribute value parse; general and character references;
  780.             function chars are translated.
  781. */
  782. /* Symbols for state names (end with a number). */
  783. #define DA0     0   /* Data in buffer. */
  784. #define ER0     2   /* ERO found. */
  785. #define CR0     4   /* CRO found (ER0, RNI). */
  786.  
  787. static UNCH
  788. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  789.          mdo  msc  mso  pero rni  tagc tago litc */
  790. da11 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,
  791.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da1*/
  792. da11a[]={MLA_,MLA_,MLA_,MLA_,MLA_,NON_,EE_ ,GET_,RS_ ,FUN_,FUN_,MLA_,MLA_,NOP_,
  793.          MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,TER_},
  794.  
  795. er11 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  796.          DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 },/*er1*/
  797. er11a[]={LPR_,LPR_,LPR_,ERX_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  798.          LPR_,LPR_,LPR_,LPR_,NOP_,LPR_,LPR_,LPR_},
  799.  
  800. cr11 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  801.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*cr1*/
  802. cr11a[]={LP2_,CRN_,LP2_,CRA_,LP2_,LP2_,LP2_,GET_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,
  803.          LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_},
  804.  
  805. *litrtab[] = {da11, da11a, er11, er11a, cr11, cr11a};
  806. struct parse pcblitr = {"LITR", lexlms, litrtab, 0, 0, 0, 0};
  807. #undef DA0
  808. #undef ER0
  809. #undef CR0
  810. /******************************************************************************/
  811. /* PCBLITV: Literal parse; no references; RS ignored; RE/SPACE sequences
  812.             become single SPACE.  Only minimum data characters allowed.
  813. */
  814. /* Symbols for state names (end with a number). */
  815. #define LS0     0   /* Leading SPACE or RE found. */
  816. #define VA0     2   /* Valid character found. */
  817. #define SP0     4   /* SPACE/RE sequence begun. */
  818.  
  819. static UNCH
  820. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  821.          mdo  msc  mso  pero rni  tagc tago litc */
  822. ls10 []={VA0 ,VA0 ,VA0 ,VA0 ,LS0 ,VA0 ,LS0 ,LS0 ,LS0 ,LS0 ,LS0 ,VA0 ,VA0 ,VA0 ,
  823.          VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,LS0 },/*ls0*/
  824. ls10a[]={MLE_,MLA_,MLA_,MLA_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,MLE_,SYS_,MLE_,MLE_,
  825.          MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,TER_},
  826. va10 []={VA0 ,VA0 ,VA0 ,VA0 ,SP0 ,VA0 ,VA0 ,VA0 ,VA0 ,SP0 ,SP0 ,VA0 ,VA0 ,VA0 ,
  827.          VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,LS0 },/*va0*/
  828. da10a[]={MLE_,MLA_,MLA_,MLA_,MLA_,SYS_,EOF_,GET_,RS_ ,FUN_,MLE_,SYS_,MLE_,MLE_,
  829.          MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,TER_},
  830. sp10 []={VA0 ,VA0 ,VA0 ,VA0 ,SP0 ,VA0 ,VA0 ,SP0 ,SP0 ,SP0 ,SP0 ,VA0 ,VA0 ,VA0 ,
  831.          VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,LS0 },/*sp0*/
  832. sp10a[]={MLE_,MLA_,MLA_,MLA_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,MLE_,SYS_,MLE_,MLE_,
  833.          MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,RPR_},
  834.  
  835. *litvtab[] = {ls10, ls10a, va10, da10a, sp10, sp10a};
  836. struct parse pcblitv = {"LITV", lexlms, litvtab, 0, 0, 0, 0};
  837. #undef LS0
  838. #undef VA0
  839. #undef SP0
  840. /******************************************************************************/
  841. /* PCBMD: State and action table for markup declaration tokenization.
  842.           Columns are based on LEXMARK.C.
  843. */
  844. /* Symbols for state names (end with a number). */
  845. #define SP1     0   /* Separator before token expected. */
  846. #define TK1     2   /* Token expected. */
  847. #define CM0     4   /* COM[1] found when sep expected: possible comment, MGRP.*/
  848. #define CM1     6   /* COM[1] found: possible comment, MGRP, or minus.*/
  849. #define CM2     8   /* COM[2] found; in comment. */
  850. #define CM3    10   /* Ending COM[1] found; end comment or continue it. */
  851. #define PR1    12   /* PERO found when token was expected. */
  852. #define PX1    14   /* PLUS found: PGRP or error. */
  853. #define RN1    16   /* RNI found; possible reserved name start. */
  854.  
  855. int pcbmdtk = TK1;            /* PCBMD: token expected. */
  856.  
  857. static UNCH
  858. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  859.          dso  pero plus refc rni  tagc tago vi    */
  860. sp21 []={SP1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,SP1 ,SP1 ,TK1 ,CM0 ,SP1 ,TK1 ,TK1 ,TK1 ,
  861.          TK1 ,PR1 ,PX1 ,SP1 ,RN1 ,SP1 ,SP1 ,SP1 },
  862. sp21a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,INV_,GRPS,LIT ,LITE,
  863.          MDS ,NOP_,NOP_,INV_,NOP_,EMD ,INV_,INV_},
  864.  
  865. tk21 []={SP1 ,SP1 ,SP1 ,SP1 ,TK1 ,TK1 ,SP1 ,TK1 ,TK1 ,CM1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  866.          TK1 ,PR1 ,PX1 ,SP1 ,RN1 ,SP1 ,SP1 ,SP1 },
  867. tk21a[]={INV_,NMT ,NUM ,NAS ,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,INV_,GRPS,LIT ,LITE,
  868.          MDS ,NOP_,NOP_,INV_,NOP_,EMD ,INV_,INV_},
  869.  
  870. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  871.          dso  pero plus refc rni  tagc tago vi    */
  872. cm20 []={SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,CM0 ,SP1 ,CM0 ,SP1 ,CM2 ,SP1 ,SP1 ,SP1 ,SP1 ,
  873.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  874. cm20a[]={LNR_,LNR_,LNR_,LNR_,LNR_,SYS_,LNR_,GET_,LNR_,NOP_,LNR_,LNR_,LNR_,LNR_,
  875.          LNR_,LNR_,LNR_,LNR_,LNR_,LNR_,LNR_,LNR_},
  876.  
  877. cm21 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,CM1 ,TK1 ,CM1 ,TK1 ,CM2 ,TK1 ,TK1 ,TK1 ,TK1 ,
  878.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },
  879. cm21a[]={CDR ,CDR ,CDR ,CDR ,CDR ,SYS_,CDR ,GET_,CDR ,NOP_,CDR ,MGRP,CDR ,CDR ,
  880.          CDR ,CDR ,CDR ,CDR ,CDR ,CDR ,CDR ,CDR },
  881.  
  882. cm22 []={CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,TK1 ,CM2 ,CM2 ,CM3 ,CM2 ,CM2 ,CM2 ,CM2 ,
  883.          CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 },
  884. cm22a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  885.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  886.  
  887. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  888.          dso  pero plus refc rni  tagc tago vi    */
  889. cm23 []={CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM3 ,TK1 ,CM3 ,CM2 ,TK1 ,CM2 ,CM2 ,CM2 ,CM2 ,
  890.          CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 },
  891. cm23a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  892.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  893.  
  894. pr21 []={SP1 ,SP1 ,SP1 ,TK1 ,TK1 ,PR1 ,SP1 ,PR1 ,TK1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  895.          SP1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,SP1 ,SP1 },
  896. pr21a[]={PCI_,PCI_,PCI_,PER_,PEN ,SYS_,PCI_,GET_,PEN ,PCI_,PCI_,PCI_,PCI_,PCI_,
  897.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  898.  
  899. px21 []={SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,PX1 ,SP1 ,PX1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,SP1 ,
  900.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  901. px21a[]={PCI_,PCI_,PCI_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PGRP,PCI_,PCI_,
  902.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  903.  
  904. rn21 []={TK1 ,TK1 ,TK1 ,SP1 ,TK1 ,RN1 ,TK1 ,RN1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  905.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },
  906. rn21a[]={PCI_,PCI_,PCI_,RNS ,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  907.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  908.  
  909. *mdtab[] = {sp21, sp21a, tk21, tk21a, cm20, cm20a, cm21, cm21a, cm22, cm22a,
  910.             cm23, cm23a, pr21, pr21a, px21, px21a, rn21, rn21a};
  911. struct parse pcbmd = {"MD", lexmark, mdtab, 0, 0, 0, 0};
  912. #undef SP1
  913. #undef TK1
  914. #undef CM0
  915. #undef CM1
  916. #undef CM2
  917. #undef CM3
  918. #undef PR1
  919. #undef PX1
  920. #undef RN1
  921. /******************************************************************************/
  922. /* PCBMDC: State and action table for comment declaration.
  923. */
  924. /* Symbols for state names (end with a number). */
  925. #define CD2     0   /* COM[2] found; in comment. */
  926. #define CD3     2   /* Ending COM[1] found; end comment or continue it. */
  927. #define EM1     4   /* Ending COM[2] found; start new comment or end. */
  928. #define CD1     6   /* COM[1] found; new comment or error. */
  929.  
  930. static UNCH
  931. /*      bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  932.         dso  pero plus refc rni  tagc tago vi    */
  933. cd22 []={CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD3 ,CD2 ,CD2 ,CD2 ,CD2 ,
  934.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  935. cd22a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  936.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  937.  
  938. cd23 []={CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD3 ,CD2 ,CD3 ,CD2 ,EM1 ,CD2 ,CD2 ,CD2 ,CD2 ,
  939.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  940. cd23a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  941.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  942.  
  943. em21 []={CD2 ,CD2 ,CD2 ,CD2 ,EM1 ,EM1 ,CD2 ,EM1 ,EM1 ,CD1 ,CD2 ,CD2 ,CD2 ,CD2 ,
  944.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  945. em21a[]={INV_,INV_,INV_,INV_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,INV_,INV_,INV_,INV_,
  946.          INV_,INV_,INV_,INV_,INV_,EMD ,INV_,INV_},
  947.  
  948. cd21 []={CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD1 ,CD2 ,CD1 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,
  949.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  950. cd21a[]={PCI_,PCI_,PCI_,PCI_,PCI_,SYS_,EOF_,GET_,PCI_,NOP_,PCI_,PCI_,PCI_,PCI_,
  951.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  952.  
  953. *mdctab[] = {cd22, cd22a, cd23, cd23a, em21, em21a, cd21, cd21a};
  954. struct parse pcbmdc = {"MDC", lexmark, mdctab, 0, 0, 0, 0};
  955. #undef CD2
  956. #undef CD3
  957. #undef EM1
  958. #undef CD1
  959. /******************************************************************************/
  960. /* PCBMDI: State and action table for ignoring markup declarations.
  961.            Literals are handled properly so a TAGC won't end the declaration.
  962.            An error is noted if the entity ends within a declaration that
  963.            is being ignored.
  964.            TO DO: Handle nested declaration sets.
  965. */
  966. /* Symbols for state names (end with a number). */
  967. #define NC1     0   /* Not in a comment; TAGC ends declaration. */
  968. #define IC1     2   /* COM[1] found; possible comment. */
  969. #define IC2     4   /* COM[2] found; in comment. */
  970. #define IC3     6   /* Ending COM[1] found; end comment or continue it. */
  971. #define LI1     8   /* Literal parameter; search for LIT. */
  972. #define LA1    10   /* Literal parameter; search for LITA. */
  973.  
  974. static UNCH
  975. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  976.          dso  pero plus refc rni  tagc tago vi    */
  977. nc21 []={NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,IC1 ,NC1 ,NC1 ,LI1 ,LA1 ,
  978.          NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 },
  979. nc21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  980.          NOP_,NOP_,NOP_,NOP_,NOP_,EMD ,NOP_,NOP_},
  981.  
  982. ic21 []={NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,IC1 ,NC1 ,IC1 ,NC1 ,IC2 ,NC1 ,NC1 ,LI1 ,LA1 ,
  983.          NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 },
  984. ic21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  985.          NOP_,NOP_,NOP_,NOP_,NOP_,EMD ,NOP_,NOP_},
  986.  
  987. ic22 []={IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,NC1 ,IC2 ,IC2 ,IC3 ,IC2 ,IC2 ,IC2 ,IC2 ,
  988.          IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 },
  989. ic22a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  990.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  991.  
  992. ic23 []={IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC3 ,NC1 ,IC3 ,IC2 ,NC1 ,IC2 ,IC2 ,IC2 ,IC2 ,
  993.          IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 },/*ic3*/
  994. ic23a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  995.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  996.  
  997. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  998.          dso  pero plus refc rni  tagc tago vi    */
  999. li21 []={LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,NC1 ,LI1 ,
  1000.          LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 },/*li1*/
  1001. li21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1002.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1003.  
  1004. la21 []={LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,NC1 ,
  1005.          LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 },/*la1*/
  1006. la21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1007.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1008.  
  1009. *mditab[] = {nc21, nc21a, ic21, ic21a, ic22, ic22a,
  1010.              ic23, ic23a, li21, li21a, la21, la21a};
  1011. struct parse pcbmdi = {"MDI", lexmark, mditab, 0, 0, 0, 0};
  1012. #undef NC1
  1013. #undef IC1
  1014. #undef IC2
  1015. #undef IC3
  1016. #undef LI1
  1017. #undef LA1
  1018. /******************************************************************************/
  1019. /* PCBMSRC: State and action table for marked section in RCDATA mode.
  1020.             Nested marked sections are not recognized; the first MSE ends it.
  1021.             Initial state assumes an MS declaration was processed.
  1022.             Columns are based on LEXLMS.C but LITC column needn't exist.
  1023. */
  1024. /* Symbols for state names (end with a number). */
  1025. #define ET0     0   /* MSS processed or buffer flushed; no data. */
  1026. #define DA0     2   /* Data in buffer. */
  1027. #define ER0     4   /* ERO found; start lookahead buffer. */
  1028. #define CR0     6   /* CRO found (ER0, RNI). */
  1029. #define ME0     8   /* MSC found. */
  1030. #define ME1    10   /* MSC, MSC found. */
  1031.  
  1032. static UNCH
  1033. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1034.          mdo  msc  mso  pero rni  tagc tago litc */
  1035. et30 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,DA0 ,ER0 ,
  1036.          DA0 ,ME0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*et0*/
  1037. et30a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EE_ ,GET_,RS_ ,REF_,DAS_,DAS_,DAS_,LAS_,
  1038.          DAS_,LAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_},
  1039.  
  1040. da30 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,DA0 ,ET0 ,
  1041.          DA0 ,ET0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da0*/
  1042. da30a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,NOP_,DAF_,
  1043.          NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1044.  
  1045. er30 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ER0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  1046.          ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 },/*er0*/
  1047. er30a[]={LAF_,LAF_,LAF_,ERX_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1048.          LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_},
  1049.  
  1050. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1051.          mdo  msc  mso  pero rni  tagc tago litc */
  1052. cr30 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  1053.          ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*cr0*/
  1054. cr30a[]={LAF_,CRN_,LAF_,CRA_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1055.          LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  1056.  
  1057. me30 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME0, ET0 ,ET0 ,ET0 ,ET0, ET0 ,ET0 ,
  1058.          ET0, ME1, ET0 ,ET0, ET0 ,ET0, ET0 ,ET0 },/*me0*/
  1059. me30a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1060.          LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  1061.  
  1062. me31 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME1, ET0 ,ET0 ,ET0 ,ET0, ET0 ,ET0 ,
  1063.          ET0, ET0, ET0 ,ET0, ET0 ,ET0, ET0 ,ET0,},/*me1*/
  1064. me31a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1065.          LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  1066.  
  1067. *msrctab[]={et30, et30a, da30, da30a, er30, er30a,
  1068.             cr30, cr30a, me30, me30a, me31, me31a};
  1069. struct parse pcbmsrc = {"MSRCDATA", lexlms, msrctab, 0, 0, 0, 0};
  1070. #undef ET0
  1071. #undef DA0
  1072. #undef ER0
  1073. #undef CR0
  1074. #undef ME0
  1075. #undef ME1
  1076. /******************************************************************************/
  1077. /* PCBMSC: State and action table for marked section in CDATA mode.
  1078.            Nested marked sections are not recognized; the first MSE ends it.
  1079.            Initial state assumes an MS declaration was processed.
  1080. */
  1081. /* Symbols for state names (end with a number). */
  1082. #define ET2     0   /* MSS processed or buffer flushed; no data. */
  1083. #define DA2     2   /* Data in buffer. */
  1084. #define ME2     4   /* MSC found. */
  1085. #define ME3     6   /* MSC, MSC found. */
  1086.  
  1087. static UNCH
  1088. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1089.          mdo  msc  mso  pero rni  tagc tago litc */
  1090. et32 []={DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,DA2 ,DA2 ,DA2 ,DA2 ,
  1091.          DA2 ,ME2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 },/*et2*/
  1092. et32a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EOF_,GET_,RS_ ,REF_,DAS_,DAS_,DAS_,DAS_,
  1093.          DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_},
  1094.  
  1095. da32 []={DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,DA2 ,DA2 ,DA2 ,DA2 ,
  1096.          DA2 ,ET2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 },/*da2*/
  1097. da32a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,NOP_,NOP_,
  1098.          NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1099.  
  1100. me32 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME2, ET2 ,ET2 ,ET2 ,ET2, ET2 ,ET2 ,
  1101.          ET2, ME3, ET2 ,ET2, ET2 ,ET2, ET2, ET2,},/*me2*/
  1102. me32a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1103.          LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  1104.  
  1105. me33 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME3, ET2 ,ET2 ,ET2 ,ET2, ET2 ,ET2 ,
  1106.          ET2, ET2, ET2 ,ET2, ET2 ,ET2, ET2, ET2,},/*me3*/
  1107. me33a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1108.          LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  1109.  
  1110. *msctab[]={et32, et32a, da32, da32a, me32, me32a, me33, me33a};
  1111. struct parse pcbmsc = {"MSCDATA", lexlms, msctab, 0, 0, 0, 0};
  1112. #undef ET2
  1113. #undef DA2
  1114. #undef ME2
  1115. #undef ME3
  1116. /******************************************************************************/
  1117. /* PCBMSI: State and action table for marked section in IGNORE mode.
  1118.            Nested marked sections are recognized; the matching MSE ends it.
  1119.            Initial state assumes an MS declaration, MSS, or MSE was processed.
  1120. */
  1121. /* Symbols for state names (end with a number). */
  1122. #define ET4     0   /* Markup found or buffer flushed; no data. */
  1123. #define ME4     2   /* MSC found. */
  1124. #define ME5     4   /* MSC, MSC found. */
  1125. #define ES4     6   /* TAGO found. */
  1126. #define MD4     8   /* MDO found (TAGO, MDO[2]). */
  1127.  
  1128. static UNCH
  1129. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1130.          mdo  msc  mso  pero rni  tagc tago litc refc */
  1131. et34 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  1132.          ET4 ,ME4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,ET4 },/*et4*/
  1133. et34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1134.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1135.  
  1136. me34 []={ET4, ET4, ET4, ET4, ET4 ,ET4, ET4, ME4, ET4 ,ET4 ,ET4 ,ET4, ET4, ET4 ,
  1137.          ET4, ME5 ,ET4, ET4, ET4 ,ET4, ET4, ET4, ET4,},/*me4*/
  1138. me34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1139.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1140.  
  1141. me35 []={ET4, ET4, ET4, ET4, ET4 ,ET4, ET4, ME5, ET4 ,ET4 ,ET4 ,ET4, ET4, ET4 ,
  1142.          ET4, ET4 ,ET4, ET4, ET4 ,ET4, ET4, ET4, ET4,},/*me5*/
  1143. me35a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1144.          NOP_,NOP_,NOP_,NOP_,NOP_,MSE_,NOP_,NOP_,NOP_},
  1145.  
  1146. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1147.          mdo  msc  mso  pero rni  tagc tago litc */
  1148. es34 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,ES4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  1149.          MD4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*es4*/
  1150. es34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1151.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1152.  
  1153. md34 []={ET4, ET4, ET4, ET4, ET4 ,MD4, ET4, MD4, ET4 ,ET4 ,ET4 ,ET4, ET4, ET4 ,
  1154.          ET4, ET4 ,ET4, ET4, ET4 ,ET4, ET4, ET4,},/*md4*/
  1155. md34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1156.          NOP_,NOP_,MSS_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1157.  
  1158. *msitab[]={et34, et34a, me34, me34a, me35, me35a, es34, es34a, md34, md34a};
  1159. struct parse pcbmsi = {"MSIGNORE", lexlms, msitab, 0, 0, 0, 0};
  1160. #undef ET4
  1161. #undef ME4
  1162. #undef ME5
  1163. #undef ES4
  1164. #undef MD4
  1165. /******************************************************************************/
  1166. /* PCBSTAG: State and action table for start-tag parse.
  1167.             Columns are based on LEXMARK.C.
  1168. */
  1169. /* Symbols for state names (end with a number). */
  1170. #define SP1     0   /* Separator before name expected. */
  1171. #define AN1     2   /* Attribute name expected. */
  1172. #define SP2     4   /* Separator or value indicator expected. */
  1173. #define VI1     6   /* Value indicator expected. */
  1174. #define AV1     8   /* Attribute value expected. */
  1175.  
  1176. int pcbstan = AN1;            /* PCBSTAG: attribute name expected. */
  1177.  
  1178. static UNCH
  1179. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1180.          dso  pero plus refc rni  tagc tago vi    */
  1181. sp41 []={SP1 ,SP1 ,SP1 ,SP1 ,AN1 ,SP1 ,SP1 ,SP1 ,AN1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1182.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  1183. sp41a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,ETIC,INV_,INV_,INV_,
  1184.          INV_,INV_,INV_,INV_,INV_,TAGC,TAGO,INV_},
  1185.  
  1186. an41 []={SP1 ,SP1 ,SP1 ,SP2 ,AN1 ,AN1 ,AN1 ,AN1 ,AN1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1187.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  1188. an41a[]={INV_,NTV ,NTV ,NVS ,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,ETIC,INV_,INV_,INV_,
  1189.          INV_,INV_,INV_,INV_,INV_,TAGC,TAGO,INV_},
  1190.  
  1191. sp42 []={SP1 ,SP1 ,SP1 ,SP1 ,VI1 ,SP2 ,SP2 ,SP2 ,VI1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1192.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,AV1 },
  1193. sp42a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,NASV,INV_,INV_,INV_,
  1194.          INV_,INV_,INV_,INV_,INV_,NASV,NASV,NOP_},
  1195.  
  1196. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1197.          dso  pero plus refc rni  tagc tago vi    */
  1198. vi41 []={SP1 ,AN1 ,AN1 ,AN1 ,VI1 ,VI1 ,VI1 ,VI1 ,VI1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1199.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,AV1 },
  1200. vi41a[]={INV_,NASV,NASV,NASV,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,NASV,INV_,INV_,INV_,
  1201.          INV_,INV_,INV_,INV_,INV_,NASV,NASV,NOP_},
  1202.  
  1203. av41 []={SP1 ,SP1 ,SP1 ,SP1 ,AV1 ,AV1 ,AV1 ,AV1 ,AV1 ,SP1 ,SP1 ,SP1 ,AN1 ,AN1 ,
  1204.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  1205. av41a[]={INV_,AVU ,AVU ,AVU ,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,AVD ,AVDA,
  1206.          INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_},
  1207.  
  1208. *stagtab[] = {sp41, sp41a, an41, an41a, sp42, sp42a, vi41, vi41a, av41, av41a};
  1209. struct parse pcbstag = {"STAG", lexmark, stagtab, 0, 0, 0, 0};
  1210. #undef SP1
  1211. #undef AN1
  1212. #undef SP2
  1213. #undef VI1
  1214. #undef AV1
  1215. /******************************************************************************/
  1216. /* PCBETAG: State and action table for end-tag parse.
  1217. */
  1218. #define TC1     0   /* Tag close expected (no attributes allowed). */
  1219.  
  1220. static UNCH
  1221. /*       bit  nmc  nu   nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1222.          dso  pero plus refc rni  tagc tago vi    */
  1223. tc41 []={TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,
  1224.          TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 },/*tc1*/
  1225. tc41a[]={INV_,INV_,INV_,INV_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  1226.          INV_,INV_,INV_,INV_,INV_,TAGC,TAGO,INV_},
  1227.  
  1228. *etagtab[] = {tc41, tc41a};
  1229. struct parse pcbetag = {"ETAG", lexmark, etagtab, 0, 0, 0, 0};
  1230. #undef TC1
  1231. /******************************************************************************/
  1232. /* PCBVAL: State and action table for tokenizing attribute values.
  1233.            Columns are based on LEXTOKE.C (but EOB cannot occur).
  1234. */
  1235. /* Symbols for state names (end with a number). */
  1236. #define TK1     0   /* Token expected. */
  1237. #define SP1     2   /* Separator before token expected. */
  1238.  
  1239. static char
  1240. /*       inv  rec  sep  nmc  nms  nu   eob   */
  1241. tk51 []={TK1 ,TK1 ,TK1 ,SP1 ,SP1 ,SP1 },/*tk1*/
  1242. tk51a[]={_INV,_NOP,_NOP,_NMT,_NAS,_NUM},
  1243.  
  1244. sp51 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*sp1*/
  1245. sp51a[]={_INV,_NOP,_NOP,_LEN,_LEN,_LEN},
  1246.  
  1247. *valtab[] = {tk51, tk51a, sp51, sp51a};
  1248. struct parse pcbval = {"VAL", lextoke, valtab, 0, 0, 0, 0};
  1249. #undef TK1
  1250. #undef SP1
  1251. /******************************************************************************/
  1252. /* PCBEAL: State and action table for end of attribute specification list.
  1253.            If delimiter occurs, process it.  Otherwise, put invalid character
  1254.            back for the next parse.
  1255. */
  1256. /* Symbols for state names (end with a number). */
  1257. #define AL0     0   /* Delimiter expected. */
  1258.  
  1259. static UNCH
  1260. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  1261.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  1262. al00 []={AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,
  1263.          AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 },/*al0*/
  1264. al00a[]={INV_,INV_,INV_,INV_,INV_,SYS_,EE_ ,GET_,INV_,INV_,INV_,INV_,INV_,INV_,
  1265.          GRPE,INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_},
  1266.  
  1267. *ealtab[] = {al00, al00a};
  1268. struct parse pcbeal = {"EAL", lexgrp, ealtab, 0, 0, 0, 0};
  1269. #undef AL0
  1270. /******************************************************************************/
  1271.